{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "# Evaluate Grid Search\n",
    "In this notebook, I want to analyse the results from a conducted grid search over GCN hyper-parameters.\n",
    "This should show me which ones perform best."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "import pickle, os, sys\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "#training_dir = '../data/GCN/training/2019_05_02_14_53_59/'\n",
    "#training_dir = '../data/GCN/training/gridsearch_CPDB_new/'\n",
    "#training_dir = '../data/GCN/training/gridsearch_layernum_rev1/'\n",
    "#training_dir = '../data/GCN/training/gridsearch_BRCA_patients/'\n",
    "training_dir = '../data/GCN/training/gridsearch_BRCA_patients/'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## Box Plot of Best Cross-Validation Runs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "def write_hyper_param_dict(params, file_name):\n",
    "    with open(file_name, 'wb') as f:\n",
    "        pickle.dump(params, f)\n",
    "\n",
    "def load_hyper_param_dict(file_name):\n",
    "    with open(file_name, 'rb') as f:\n",
    "        params = pickle.load(f)\n",
    "    return params\n",
    "\n",
    "def write_performances(performance, file_name):\n",
    "    write_hyper_param_dict(performance, file_name)\n",
    "\n",
    "def load_performances(file_name):\n",
    "    return load_hyper_param_dict(file_name)\n",
    "\n",
    "def get_performances(training_dir):\n",
    "    results = []\n",
    "    for param_dir in os.listdir(training_dir):\n",
    "        if param_dir.startswith('params'): # it's really a directory from us\n",
    "            param_file = os.path.join(training_dir, param_dir, 'params.txt')\n",
    "            performance_file = os.path.join(training_dir, param_dir, 'performance.txt')\n",
    "            if os.path.exists(param_file) and os.path.exists(performance_file):\n",
    "                parameters = load_hyper_param_dict(param_file)\n",
    "                performance = load_performances(performance_file)\n",
    "                results.append((performance, parameters))\n",
    "    return results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "104"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "performances = get_performances(training_dir=training_dir)\n",
    "len(performances)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABMkAAAHbCAYAAADRds2jAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAABdAUlEQVR4nO3deZgkVZWw8fc0NEKxy+oGOCyNo6jT3SoKIgiDiIqMuI6CbLaMOCqD2ydu6DBuiCLKjK0igqIIjqIyKiIgAupII+MGTSM2itiyNWux1/n+iCg7STKrMnKvyvf3PPlEVcSNG6ciIyOiTt64NzITSZIkSZIkaZTNGXQAkiRJkiRJ0qCZJJMkSZIkSdLIM0kmSZIkSZKkkWeSTJIkSZIkSSPPJJkkSZIkSZJGnkkySZIkSZIkjbzVBx2AGtt4441zq622GnQYkiRJkiRJs8aSJUtuysxNGi0zSTakttpqKy699NJBhyFJkiRJkjRrRMS1zZb5uKUkSZIkSZJGnkkySZIkSZIkjTyTZJIkSZIkSRp5JskkSZIkSZI08kySSZIkSZIkaeSZJJMkSZIkSdLIM0kmSZIkSZKkkWeSTJIkSZIkSSPPJJkkSZIkSZJGnkkySZIkSZIkjTyTZJIkSZIkSRp5JskkSZIkSZI08kySSZIkSZIkaeSZJJMkSZIkSdLIM0kmaUYbHx/n29/+NuPj44MORZIkSZI0g5kkkzSjLVmyhBUrVnDZZZcNOhRJkiRJ0gxmkkzSjDU+Ps5VV10FwNKlS21NJkmSJElqm0kySTPWkiVLyEwAMtPWZJIkSZKktpkkkzRjXX311UxMTAAwMTHBsmXLBhyRJEmSJGmmMkkmacbaZpttmDOnOI3NmTOHbbfddsARSZIkSZJmKpNkkmasBQsWEBEARATz588fcESSJEmSpJnKJJmkGWtsbIztttsOgHnz5jE2NjbgiCRJkiRJM9Xqgw5AkjqxYMECVq5caSsySZIkSVJHbElWiojHRsRJEXF9RNwbEcsj4pMRsWGL6+8aEdnC63G9/lukUTI2NsY+++xjKzJJkiRJUkdsSQZExNbAJcCmwFnAlcDTgTcDe0XETpl58zTVLAeObrJsB+AlwG8y809dCVqSJEmSJEldY5KscCJFguxNmXnC5MyIOA44AjgGOGyqCjJzOfD+Rssi4qvlj5/rQqySJEmSJEnqspF/3LJsRbYnRUuwz9Qtfh9wF7B/RKzdZv0bA/8E3A2c0n6kkiRJkiRJ6pWRT5IBu5XTczJzonZBZt4BXAyMATu2Wf9rgUcAZ2Tmre0GKUmSJEmSpN4xSQbzyulVTZYvK6fbtVn/68rpZ9tcX5IkSZIkST1mkgzWL6e3NVk+OX+DqhVHxHMoknC/ycxLWii/KCIujYhLb7zxxqqbkyRJkiRJUptMkvXWonK6uJXCmbk4Mxdm5sJNNtmkh2FJkiRJkiSplkmyVS3F1m+yfHL+rVUqjYhHAvtRdNh/aluRSZIkSZIkqS9MksHSctqsz7Fty2mzPsuameyw/+t22C9JkiRJkjTcTJLB+eV0z4h4yP6IiHWBnYBx4GcV653ssL+lRy0lSZIkSZI0OCOfJMvM3wPnAFsBh9ctPhpYGzg1M++anBkR20fE9s3qjIhnA0+gxQ77JUmSJEmSNFirDzqAIfEG4BLgUxGxO3AF8AxgN4rHLI+qK39FOY0m9VXqsF+SJEmSJEmDNfItyeBvrckWAidTJMeOBLYGjgd2zMybW60rIjYEXood9kuSJEmSJM0YtiQrZeafgINaLNusBRmZuRJYq1txSZIkSZIkqfdsSSZJkiRJkqSRZ5JMkiRJkiRJI88kmSRJkiRJkkaeSTJJkiRJkiSNPJNkkiRJkiRJGnkmySRJkiRJkjTyTJJJkiRJkiRp5JkkkyRJkiRJ0shbvdmCiDipS9vIzDykS3VJkiRJkiRJXdc0SQYcCCQQbdY9uW4CJskkSZIkSZI0tKZKkp1CkeCSJEmSJEmSZrWmSbLMPLCPcUiSJEmSJEkDY8f9kiRJkiRJGnkmySRJkiRJkjTyTJJJkiRJkiRp5DXtkywiTurSNjIzHd1SkiRJkiRJQ2uq0S0PpBjdMtqse3LdBEySSZIkSZIkaWhNlSQ7hSLBJUmSJEmSJM1qTZNkmXlgH+OQJEmSJEmSBsaO+yVJkiRJkjTyTJJJkiRJkiRp5JkkkyRJkiRJ0sibquP+piLiEcB+wM7AY4G1aT4KZmbm7u2FJ0mSJEmSJPVe5SRZRDwLOB14NEVibHIEzMkkWe2ImIEjZEqSJEmSJGnIVUqSRcTjgLOB9YFfAd8H3g7cCXwS2Bx4LvB3wE3AfwEPdi9cSZIkSZIkqfuqtiT7N4oE2feAF2ZmRsTbgTsz872ThSLiX4BPAU/JzBd3LVpJkiRJkiSpB6p23L8nxeOT78vMpo9RZuZ/Au8DXhgRr+sgPkmSJEmSJKnnqibJtgAmgMvq5q/RoOxnKBJqB1YPS5IkSZIkSeqfqkmyAFZm5kTNvLuA9SLiIaNbZuZtwG3A9p2FKEmSJEmSJPVW1STZn4F16+ZdB6wGPKF2ZkSMARsAY+0GJ0mSJEmSJPVD1STZNcAaEbF1zbyfl9PD6sr+G0XLs+XthSZJkiRJkiT1R9XRLS8Angf8I/D7ct7ngQOAwyNiG+CXwFOA51P0SfbVrkQqSZIkSZIk9UjVlmSnAz8GtpuckZkXAR+jaDW2F/BOYO/y958AH+5KpJIkSZIkSVKPVGpJlpnLgd0azH9HRPwQeCXwOIoO+78PnJKZD3QhTkmSJEmSJKlnqj5u2VRmnguc2636JEmSJEmSpH6p+rilJEmSJEmSNOtUakkWEWsA2wP3ZeaV05TdHlgDuCIz728/REmSJEmSJKm3qrYkewXF6JVvaaHsUWXZl1bchiRJkiRJktRXVZNk+5XTU1oo+wWKES5NkkmSJEmSJGmoVU2SPQl4APjfFspeXJbdoWpQkiRJkiRJUj9VHd3y0cBtmfnAdAUz8/6IuA14VFuRSZK6ZvHixQ/5fdGiRQOKRJKk0eS1WJKGX9WWZPcB67ZSMCICWAfIqkFJkiRJkiRJ/VQ1SfYHYI2IeGYLZZ8FPAK4tnJUkiRJkiRJUh9VTZL9kKIz/g9HRNNHNctlH6JoRXZO++FJkiRJkiRJvVc1SfYp4B5gZ+DciPiH+gIRMR/4UVnmXuD4ToOUJEmSJEmSeqlSx/2ZeV1EvB44GXg2cGlErGDVI5VbAptTtDZLYFFm/rF74UqSJEmSJEndV3V0SzLz1Ii4BTgB2Ipi9Mr6ESyvAd6Ymd/vOEJJkiRJkiSpxyonyQAy8+yI+D6wG0UH/ZtTtBxbAVwCnJ+ZE12LUpIkSZIkSeqhtpJkAJn5IHBu+ZIkSZIkSZJmrKod90uSJEmSJEmzTtstySLiycDzKDrrH8vMg2uWzQU2ATIz/9JxlJIkSZq1Fi9e/JDfFy1aNKBIJEnSKKucJIuI9YGTgH0nZ1H0R3ZwTbG5wP8BG0bEUzLztx3GKUmSJEmSJPVMpcctyxZi36NIkI0DZwP31JfLzHHgi2X9L+04SkmSJEmSJKmHqrYkOwTYEfg98JzMvD4i/gJs2qDsN4C3Art0FqLa4WMLkiRJkiRJravacf+rKB6tPCIzr5+m7C+BCWD7dgKTJEmSJEmS+qVqkmwHiiTZOdMVzMz7gNuAjdqIS5IkSZIkSeqbqkmyMeCOMgHWirnAAxW3IUmSJEmSJPVV1T7JbgIeFRHrZOadUxWMiMcD6wBXtxucJGmV+r4GB1WXfRxKkiRJmo2qtiT7eTl9QQtl/7Wc/qTiNiRJkiRJkqS+qpokOwkI4IMR8ehmhSLi9cCbKfov617Thx6KiMdGxEkRcX1E3BsRyyPikxGxYRt1zY+I0yLiurKuv0bEjyPigF7ELkmSJEmSpM5UetwyM8+OiG8A+wGXRsRpwFoAEbEI2BJ4IfAkimTa5zLz583qGxYRsTVwCbApcBZwJfB0ikTfXhGxU2be3GJdbwSOB1YCZwN/Bh5JsU/2Bk7p+h8gSZIkSZKkjlTtkwxgf+Ae4NXAETXz/7OcRjk9CTi8/dD66kSKBNmbMvOEyZkRcRzF33gMcNh0lUTEnsCngB8CL83MO+qWz+1m0JJGW7/6ButmX2iSJEmSNKwqJ8ky8x5g/4j4LHAo8Czg0cBqwArgYmBxZl7YzUB7pWxFtiewHPhM3eL3AYso/t4jM/Ouaar7GHA38M/1CTKAzLy/84glSZIkSZK6q/7L8VEcsKudlmQAZOZFwEVdjGVQdiun52TmRO2CzLwjIi6mSKLtCPyoWSUR8STgycC3gFsiYjdgAUW/bJcD59fXL0mSJEmSpOFQteP+SiJi74j4RS+30QXzyulVTZYvK6fbTVPP08rpDcAFwHkULcuOBc4FLo+IbdoPU5IkSZIkSb3SdkuyqUTE7sAHKFpfDbv1y+ltTZZPzt9gmno2LaeHUHTW/wKKlnabAe8FXgOcHRE7ZOZ9jSooBz9YBLDFFlu0ErskSZIkSZqCjxGqVS0lySJiA+ClwBMp+h67BvhqZv61rtyOwIeBZ0/OAn7TrWCH3GSrvNWAV2bmT8vfb4+IA4DtgYUUI4N+tVEFmbkYWAywcOHC7G24kiRJkiRJmjRtkiwi9gJOY1WLq0n/EREHZOaZETEGfBp4LatGt/wF8B+ZeVY3A+6ByZZi9X8fdfNvnaaeyeUrahJkAGRmRsRZFEmyp9MkSdZIt0aV66Qes+ySJEmSJGm2mzJJFhGPA74OrNNg8ZrAlyPiV8AXKR6tDODHwDGZeW6XY+2VpeW0WZ9j25bTZn2W1ddza5PlK8vpWq2FJUmSJEm95WNokrTKdB33H06RIFsJHEDR79ZmwIEUyaC5wA+AZwK/A56bmbvNoAQZwPnldM+IeMj+iIh1gZ2AceBn09TzM+AuYKuIWLvB8ieV0z90EKskSZIkSZJ6YLok2e5AAkdk5pcz86bMvDEzTwGOoGg5tgVFB/VPz8wLehptD2Tm74FzgK0okoK1jgbWBk7NzLsmZ0bE9hGxfV0948AXKFrY/XtERE35HSgSiw8AZ3b/r5AkSZIkSVInpuuTbJty+vUGy75O8ZglwLsz8+6uRdV/bwAuAT5Vjsx5BfAMYDeKxyyPqit/RTmNuvnvAXYB3gI8MyIupmh59xKK5NlbyqRc2/rR/Llb/aCpfTZ7lyRJkiSpv6ZrSbYucEtm3lO/oEyK3VL+elm3A+unMnG1EDiZIjl2JLA1cDywY2be3GI9t1OM7PkfwCOBNwIvpGhp97zMPL7rwUuSJEmSJKlj07UkmwPcP8Xy+wEy886uRTQgmfkn4KAWy9a3IKtddidFy7P61meSpCFnK05JkiRpdE3XkkySJEmSJEma9aZrSQawVkQc0GwZQETsz8P75/qbsqN/SZIkSZIkaSi1kiRbj1Ud9Ddz8hTLEjBJJkmSNAR8rHhm8/2TJKl3WkmSNW0hJs0G3my2xv0kDYafPUmSJKk/pkuSPb4vUUiSJEmSJEkDNGWSLDOv7VcgkiRJkiRJ0qA4uqUkSZIkSZJGXleSZBHxmIjYoht1SZIkSZIkSf3WSsf9rbgU2KSL9UmSZjk7pJckSZI0TLqZ1HIUTE3Lf4ql2aX+Mz2oujyXSJIkSeqULb9mmG7+Q6rRY0JDkiRJkqTG7LhfkiRJkiRJI8+WZJLUZT5WLEmSJEkzT7eSZPZHJknqW0LQR88lSZIkdVu3kmQfA9bpUl2S+sSEhiRJkiRJha4kyTLz492oR5IkSdNzIBZJkqTus08yVeaNuSRJkiRJmm06SpJFxJrAhsDcqcpl5h872Y4kSZIkSZLUS5WTZBExBrwdeBWwTQurZDvbUcHWUpIkSZIkSb1XKXkVERsAFwJPpPURLR35UpIk9Vz9I/yj9EWTA7FIkiR1rmoLr/cATwLuB04AzgKuBx7oclyaQbwxb8y+2yRJkiRJmjmqJsn2pXh88i2Z+Z/dD0dqjwkpSZIGr1vXY6/FkiRpEKomyR4DTABf7EEsDZV9oD0beA7wTODRwCbAmsDNwI3AFcCPgR9n5tJ+xSZJkiRptJgMlqTZq2qS7BZgzcy8pxfB1IqI+cDrKQYIWHtydl2xx5SvpwKvLNf7JfBZ4LTMvKvXcUqSJEmjbJT7A5QkzS5Vk2QXAftFxGMy88+9CCgingocC+zGqqTYPcBlwC+BmyiSdXcDjyxfjweeAWwBzAf+C/hoRPwHcHxm3teLWKUq7LtNGm22PJAkSZKGW9Uk2UeAF1N04H9Yt4OJiC8BrwbmUCTDTgdOA36RmdMODhARmwH7AK8BdgY+DPxLRLw2M3/S7Xg1vExISZI0eP24HnstliRJ3VIpSZaZSyLiQOCkiJgLHJOZ13Qxnv2B3wEfBM7MzAcrxvdX4HPA5yJiS+CdwEEUrdJMkkmSJEnqKpPBkjR7VEqSRcRkQuxB4EDgwIi4BbhjitUyM7ducROvAr6emVklriYbvZaiFdkxwJad1idJmhkc7VaSJElSO6o+brlVg3kbla9mWk54ZebpFeNppc7rgOu6Xa9W8Zut1rifJNWy5YEkSZI0XKomyQ7qSRSSJEmSJEnSAFXtk+xLvQqkW8q+0l6fmZ8edCySJElSPR8Ll6ZWf1x7rErql6otyYZWRKwGHAIcBTwGMEkmSXK0W0mSJEktGeokWUSMAdsCqwF/yMyVDcoE8FrgPRR9pgUV+kFT5/wHtDXuJ0mSJEmShldbSbIyMfVPFKNRLgQ2LRfdAPwCOA04q91RKiNifeBTwMuBNcrZGRHfBg7PzL+U5XYFTgD+nlXJsbOAY9rZriRJkiRJM4GPpUrdVzlJFhGbAWcCz5qcVbN4S2ALYD/g4oh4eWauqFj/6sAPgQV1dQfwYmC7iJgP/CvwEWAO8CBwOvChzPxt1b9JkurZX4wkqV9sbS5J0nColCSLiDWAHwA7UCSt/pcioXVdWeSxwB7AM4CdgO9FxNMz8/4Km3ktRes0gPOA75fbeh7wXOAJwGfLcgmcAnwgM6+p8rdodvMmUJIkSZIkVVG1Jdm/AE8Gbgdek5nfbVDmPRGxN8Ujl08GDqN4JLJVL6NIfn0uMw+rmf+xiFgMHAocAKwEXpKZP674N0iSpA75iIckSZJmm6pJspdTJLAOb5IgAyAz/yciDgdOBV5JtSTZDuX03xss+yBFkgzgnSbIJEmSJA2STzBI0uxRNUn2BOB+iv6/pnM68IVynSo2AsYz87r6BZn5p4gYB9YCvl2xXklqm/3FaDYaxr73hjEmSZIkjYaqSbK1KBJYD0xXMDMfqEloVbEGcMsUy+8A1srMv1asVyPEhIYkSZIkSaqiapLsr8DjImKLzPzjVAUjYitgA2DKcpIGxySfJEmSJEmFqkmyC4HXAJ+IiJdmZjYqFBEBHEfRf5n9hkmSJEmalfrxBINfbEpSf1RNkh0HvBrYFzgvIv4duDAz7weIiLnAc4B3A7sAE8An2ohrs4h4cKoC0yzPzKz6t0mSNNKG8VH1YYxJkiRJs1OlRFJmXh4RbwU+TpEEOwd4ICJuKotsXNYZ5e9vzczL24grpi8iSZIkSVLv1X+Z4gAv0uxUubVVZn4iIpYBHwW2B+YCj6or9jvgHZl5dhsxHd3GOhogv32fuWyh0brZ8DdIkiRJkppr65HEzPwu8N2I2AFYCGxaLroBuDQzf91uQJlpkkySJEmSJEl91VG/XWUyrO2EmCRJkiRJkjQM5gw6gOlExFhEbB4Raw46FkmSJEmSJM1OQzsCZET8C/BGin7PADIifgV8PDO/MrjI1Ek/VnZ4qZnK/tskSZIkaXZrmiSLiPPKH6/NzIPq5lWRmbl7lRUiYjFwyOSvNdOnAqdExN9n5lFtxKIRYaJBkjQM/HJIkiRp5piqJdmu5fTKBvOqyCqFI2JP4NDy11uAHwDXAVsBLwDGgHdExJmZ+cs24pEkSZKGhl/uSZI0HKZKkk2OMnlTg3m9dHA5/QXwwsy8cXJBRGwJnANsAxwImCSTJEmSJGkI2IJaM13TJFlmPiwh1mheDzydovXZG2sTZOX2r42ItwPfLMtJkiRJPeE/e5IkjZZh7Lh/c+B+YEmT5ReX0836E45mAgcTkCT1Sjcfheukrpl4ffIxQkmSNJMMY5JsTWBFZk40WpiZN0XEZDlJHfCfF0mSBs8RlCVpen5ppX6olCSLiDUoWnrdl5kr6patA7wf+EdgAvgu8B+ZeXd3QpUkSb3kP9CSNDOZPJCk7qjakuxQ4ATgS6zqYH/S2cDOQJS/Pxl4dkTslpmVRriUJEmSJEmS+qlqkux55fS02pkRsQ/wbIoWZKcBdwMHlPP2B06puJ1NIuKaDspkZm5dcZtST9lCQ6PA41yjwEfjWtePfTUb9pMkSRoOVZNkTyin9Z3q/zPFiJQfycyjACLiMuDEclnVJNlqwFYdlLHlmtSAAxxIkiRJmg380kq9UDVJtgkwnpkr6+bvVk4/XzPvVIok2VMqbuNLFct3RUQ8FvgAsBewEfAX4FvA0Q3+3mZ1XAA8Z4oia2XmPZ1FKklSb3izKUmzwzCcz4exn7RhjEnScKmaJFub4lHKv4mIrSiSZ3/MzD9Mzs/MuyLiVuCRVTaQmQdVjKljEbE1cAmwKXAWcCXwdODNwF4RsVNm3lyhyqObzH+go0AlSZIkSZLUE1WTZLdQ9AW2QWbeWs57bjm9pEn9d7YZWz+dSJEge1NmnjA5MyKOA44AjgEOa7WyzHx/twPUzOOjjRpFw/DNtSRJkiS1o2qS7DKKzvsPAT4eEXPKnxM4v7ZgRGwCrANc0YU4e6ZsRbYnsBz4TN3i9wGLgP0j4sjMvKvP4UlSUyaKJEmSJKl7qibJvkTRZ9eHI2IPiscs5wN3AGfUlX12OR3qJBmr+lM7JzMnahdk5h0RcTFFEm1H4EetVBgRrwAeD9xH8fefl5n3di9kSZIkSZo5hrG1+TDGJGmwKiXJMvP0iHgecCBFizKAe4DDah6/nPQKGrQwm05EnFeh+N3AjRSjbX4zM6+rsq3SvHJ6VZPlyyiSZNvRYpIM+Frd7zdExOGZeWYb8UmSJEmSJKnHqrYkIzMPjogvAM8CbgV+lJnX1JaJiDWA24BTgP+puIldKZJr0Uo45XR/4NiI+ATwrvoWYdNYv5ze1mT55PwNWqjrLOBY4JfAzcCWwGuBI4HTI+IFmfn9ZitHxCKKxzvZYostWticJEmSpuJodpIkqVWVk2QAmXkxcPEUy++jTPa04UJWJb+mMwY8Bng0MBd4G7Ah8Po2t92RzPxE3aylwLsi4nrgBOBDQNMkWWYuBhYDLFy4sNV9IGlE+YiAJEmSJHVPW0myXsrMXauuExFbAf8PeB1waER8KTMbjbbZyGRLsfWbLJ+cf2vVuGp8HvgE8NSIWDcz7+igLmnWGYYkjN/wS5IkSdJomzPoALohM5dn5uuBL1A8pnlwhdWXltPtmizftpw267NsWpl5D8XgBgBrt1uPJEmSJEmSeqNpS7KIOKn88S+ZeVTdvCoyMw9pJ7g2fBQ4BNipwjqTAwvsGRFzavszi4h1y7rGgZ+1G1REzKN4DPQO4KZ265EkSVJnfFRdkiQ1M9XjlgdS9A22FDiqbl6rnepHOe1Lkiwzl0XEOEUfZa2u8/uIOIdiBMvDKfoOm3Q0Rcuvz2bmXZMzI2L7ct0ra+Y9HrgtM2+prT8iNgG+WP76tcx8oNpfJUmSJEmSpF6bKkl2CkWC6y8N5g2ze4B1K67zBuAS4FMRsTtwBfAMYDeKxyyPqit/RTmtTRY+B/iviLgIuAa4BdgC2JuiX7NLgbdXjEsaSf34lt9v+CWp9zzXapDGx8c599xz2WOPPRgbGxt0OCPP84GkmaBpkiwzD2xl3jCJiLWADaj4SGPZmmwh8AFgL4rE1l+A44GjM3NlC9UsAb4GLAD+AViP4vHKXwNfp2iNdl+VuCRJnfOmXJJG05IlS1ixYgWXXXYZO++886DDkSTNAEM3umWH9qYYjOC3VVfMzD8BB7VY9mGPm2bmrykeR5UkSZI0QOPj41x1VTHu1tKlS5k/f76tySRJ05o1SbKyT7DjKB4H/e6Aw5HUAVv+SJKkTixZsoTMopeYzLQ1mSSpJZWSZBGxKfBK4MbM/Oo0ZV8NbASclpktP/4YEbtUCGkt4DHAzsDLKDrZ/wvw+Qp1SJIkqQv6NXKkNJ2rr76aiYli0PqJiQmWLVtmkmzAHFlW0kxQtSXZa4CPAe9voexTgCPLnz9VYRsX0N7gAAGsBPbLzDvaWF8jyht6aXbzpnxmc79Kasc222zD0qVLmZiYYM6cOWy77baDDkmSNANUTZLtU07PaKHsKcBbgRdTLUkGDx01shUry5iOKfsWkyQJMMkiSaNowYIFf+uTLCKYP3/+gCOSZpZu3T91Uo+NGTQIVZNkWwP3ZuaV0xXMzN9ExD3lOlXsVqHs3cBNmXlNxW1IGmL9uCCaOJGk0eT5fzSMjY2x3XbbccUVVzBv3jw77ZcktaRqkmxT4PYK5e8CNquygcz8caWIJKkP/KdK3eYxJUm9tWDBAlauXGkrMklSy+ZULH87sEFErDldwbLMBsB4G3F1JCKe2u9tSpIkSRoeY2Nj7LPPPrYikyS1rGpLst8CzwZeCJw5TdkXAasB0z6a2Q0RsQHwauBgikEDqv5tkqRZoJPHdetbd9kXhiRJkt2haHRUTSR9G9gFODYiLsnM6xsViojHAMdSjFL5rY4inEZE7E6RGPsn4BEUnf63MzqmpCHhBVIaXSY51WuOeCtJkpqpmiT7L+AtwOOAyyPiQ8B3gWvL5VtStCB7J7AxcB1wYlcirRERjwUOKl9bTs6m6Mj/e8DXu71NdYf/sGim8B91SZIkSRotlZJkmTkeEfsC36dIgh1bvuoFcBOwT2be1WmQABExF9gXOATYnaI/tclWY2cBpwPfycy+94EmSZIkSZKkma1yv12ZeVlEzAc+BLwcmFtX5D7ga8BRmfnnTgOMiB0oEmOvBh5JkRgD+BmwY/nza0yOSZKGWbstCm2ZOHx8jE6SJGl2aqtz+8y8Dtg/Il4PLAQ2p2jRtQK4NDPv7iSoiFgP+GeK5NjkmM0B/Ak4FfhSZi6LiIlOtiNpOJg8kCRJkiQNWkcjQJatty7sUiwARMSpwEuANSkSY3cB36BIjJ3fzW1Jw8pkjyRJkiRJ/dVRkqxHXk3RKu08ilZj3+hWv2aSJEmSJElSI20lySJiDDgUeB7F6JJrZebWNcvXB14AZGZ+tc3YNitf61G0JpMkSZIkqSvsY1JSvcpJsoh4KsVoko9lVSf6WVfsduDdwLyI+GtmnldhEx8D9geeBHwY+I+IOBc4BfhmZt5TNWZJ6qdRflzWm01JkiRJM1WlJFlEbAScDTwKWAJ8FXgvsG5tuczMiPgCRcJrH4pHJ1uSme+IiHcBL6TouP/5FC3W9gTuiIgzgVMys6t9oUmSJM1UJqglSZI6V7Ul2REUCbIfAc/LzImIeBt1SbLS2RRJsmdWDSozH6RorXZWRGwOHAgcBGwLHAwcFBF/rF2l6jYkSdJDmWhpbJRbh0qSJI2SqkmyF1EkpN6emRPTlF0K3A9sPU25KWXmCorHLj8cEc+m6AttP4q+0CZdGBGnA2dk5rWdbE+SJEmSNPv160sQv4SSZo6qSbK/A+4DLp+uYPnI5e3A+m3E1azOnwA/iYg3Aq+iaFX2dGABMB/4SEQsAU7PzI93a7uSpMY6ubmsv2G0tY4kSZKkQaqaJJsDPJCZ0z7eGBEBrEMPRqbMzDuAxcDiiHgiReuyVwMbAwspEmYmySRJ0kiwNYQkSVLnqibJ/gxsHRGbZuYN05R9GvAI4Iq2ImtRZv4WOCIi3g68mCJhtkcvtzlTjI+Pc+6557LHHnswNjY26HAkdZn/rKpTtgSUNKmb15RO6vJcIkkapDkVy19QTg9qoez7KPov+2HFbbQlM+/PzDMzcy9gq35sc9gtWbKEFStWcNlllw06FEmSJEmSpKFWNUl2PEXi610R0bC1VkRsFhFfAZ5P0X/ZZzoLsbrMvK7f2xw24+PjXHXVVQAsXbqU8fHxAUckSZIkSZI0vColycpHG98FrAv8ICIupeyYPyJOi4iLgWuBV5arvDkz/9hq/RHxtCrxtFjnWhHxhG7XO+yWLFnCZNdxmWlrMkmSJEmSpClU7ZOMzPxoRNwMHEvRQf6kVwBR/nwr8JbMPKVi9T+PiO8C78/MjrI6EbEWcDjwVuBE4AOd1DfTXH311UxMTAAwMTHBsmXL2HnnnQcclaRO2H+UJKlfHAxCkjSKKifJADLzCxFxOrAfsBPwaGA1YAVwMXBGZt7WRtUXAy8EXhARvwC+DJyemTe2snI5ouZzKUa6fAlFi7e7gMvbiGVG22abbVi6dCkTExPMmTOHbbfddtAhSZIkSZIkDa1KSbKI2KX88VeZeSvwpfLVFZn57IjYD/gI8HSKETI/GRFXAf8L/B9wI3ALcC+wIfBI4O/K8guBtSlatD0IfA54bwsjcc46CxYs+FufZBHB/Pnzp1lDkqTW2RpRkiRJs03VlmQXUCSfNu1+KIXM/EZEnAW8FDgM2AXYHpgH7D/FqpOPet4IfBH4bGb+oVdxDruxsTG22247rrjiCubNm8fY2NigQ5KkoWfiR5IkSRpdVZNktwEPZubKXgQzKTMfAL4GfC0itgWeR5EsewbwKB4a9+3A74ALKZJ4P8rM+3sZ30yxYMECVq5caSsyzVomNCRJkiRJ3VI1SXY18OSIeERm3tuLgOpl5jJgGfDpyXkRsQGwJnCzCbHmxsbG2GeffQYdhiQ1ZJJTkiRJ0jCZU7H814C5wMt7EEvLMvPWzFxhgkySJEmSJEndUDVJdjzwU+DTEbF3D+KRJEmSJEmS+q7q45bvouj7awfgOxHxW+Bi4AaKDv0byswPtB2hJEmSprR48eJBhyBpiHhOkKT2VE2SvR9IVo0k+STgiS2sZ5JMkiRJA2fyQJIkNVM1SXYhRZJMkiRJkiRJmjUqJckyc9cexSFJkiRJkiQNTNWWZJIkSRqwRYsWtb1u/eOGndQlaTj163Pt48uSZpuWkmQRsQbwYuBpwHrALcDPgO9m5kTvwpMkSZLaZ0Jx5hqWBIzvuySNjmmTZBExH/hv4HENFl8VEftk5rKuRyZJkiRJkiT1yZypFkbERsD/UCTIosFrHvA/EbFWj+OUJEmSJEmSembKJBnwBmBT4H7g3ymSYmsDTwROBCaAvwP272GMfxMRcyLiaRHx0og4oB/blCRJkiRJ0uw33eOWzwcSODozP1Qz/wrgjRExAbyxLNfTTgMi4l+BdwMb18w+pWb5hsBPKP6m52TmX3sZjyRJkqT+sTN6SVKvTdeSbF45PbHJ8sn523UnnMYi4jPAJ4FNgDsoEncPkZkrgcuAbYGX9TIeSZIkSZIkzS7TtSRbH1iZmbc1Wf77crpe90J6qIjYC/gXiuTYAZl5VkT8heIx0HqnAa8B9gA+3auYpFHkyE6SJPWGLZckSRoO07UkmwPc12xhZt5f/rha1yJ6uMMoWo69NzPPmqbsT8vpDj2MR5IkSZIkSbPMdEmyYfCMcnrSdAXLFm+3A5v3NCJJkiRJkiTNKtM9bgmwVgsjSU5ZJjNPabasBY8EbsvMO1osP8HMSP5JkiRJkiRpSLSSJFsP+OIUy3OaMknNKJRtuB3YMCLm1jze2VBEPJKiH7XrO9ieJEmS1DP28ylJ0nBqpcVVdOHViV+XdTxjuoLAq8qyl3a4TUmSJEmSJI2Q6VqSPb4vUUztTGBX4P0RsWdmTjQqFBFPAf6douXaV/sXniRJkiRJkma6KZNkmXltvwKZwueANwC7AT+MiE9QjqYZEdsCWwEvAg4B1qIY4fKMgUQqSZIkSZKkGamVPskGKjPvj4gXAN+nSJTtWrP4ypqfg+LRzP0yM/sXoSRJkiRJkma6oU+SQdGiLSIWAEcCBwNb1hX5M0WLs49n5l39jk+SJElSby1evHjQIUhd183jupO6HFBEKsyIJBlAZo4DHwQ+GBGPBh5N8djliiF5LFSSpK7zplWSJEnqjxmTJKuVmdcD1w86DkmSJEmSJM0OcwYdwHQi4qiI2GLQcUiSJEmSJGn2mgktyT4IHB0RFwKnAN/IzDsGHJMkSZJmOR93ltRv/Trv2Mef1NhMSJL9EdiCYlTL5wCfiYhvAacC52TmRLc2FBGPBT4A7AVsBPwF+BZwdGaubLPOXYDzKVrtHZOZ7+5OtJIkqZYJDWl26eQzXZ8A8PwgSWrF0D9umZlbUSTITgJuB9YCXgmcDVwXEcdGxFM63U5EbA0sAQ4C/hf4BHAN8GbgpxGxURt1rgt8CRjvND5JkiRJkiT1TqWWZGWrKIBfZeat3Q+nscy8ELgwIg4H9gEOAJ4HbA4cARwREb+heBzzK5m5oo3NnAhsCrwpM0+YnBkRx5XbOAY4rGKdxwPrAx8q15ckSZKGno9iSZJGUdXHLS8AHqRIJvVdZt4LnAGcEREbA68CXgM8DdgB+Cjw4Yg4NzOf32q9ZSuyPYHlwGfqFr8PWATsHxFHZuZdLdb5YopWafszMx5rlSRJkmYFH6+UJLWj6uOWtwG3tds/Vzdl5k2ZeUJmPgPYnqKl1h+B1SgSXlXsVk4f1sdZOUjAxcAYsGMrlUXEpsDngG9l5pcrxiJJkiRJkqQ+q9rC6WrgyRHxiLJV17BYF1iPIpHVjnnl9Komy5dRJN62A37UQn2fo0hAVn08U5IkSZIkqS3dfFy+k7pmaoveqkmyrwELgJdTjC45MBHxOIpHLfdnVZIrgPsoOvWvYv1yeluT5ZPzN2ghroMp+k17RWb+tUoQEbGI4tFOtthiiyqrSpIkSV3Tr39u7PtMkjRMqibJjgdeAnw6Im7OzP/pQUxNRcQ6wMsoEmO7UCTFolz8c4rE3dcy85Z+xlUT31bAJ4EzMvPrVdfPzMXAYoCFCxdmV4OTJEmSJElSU1WTZO8CLqToJP87EfFbiv66bqDo0L+hzPxAuwFGxByKkSz3B14MrMmqxNi1wJeBUzJzWbvbYFVLsfWbLJ+cf+s09ZwE3A28oYNYJEmSJEmS1GdVk2TvB5JVSaonAU9sYb22k2TAn1k1mmYAtwNnUiTGLuyg3lpLy+l2TZZvW06b9Vk2aT5FQu3GiGi0/KiIOAo4KzP3rRqkJEmSJElSq3x8vpqqSbILKZJk/bQZRSu1c4BTKBJM93R5G+eX0z0jYk7tCJcRsS6wEzAO/Gyaek6h8eAB21I8Hno5sAT4ZacBS5IkSZIkqXsqJckyc9cexTGVfwNOy8wberWBzPx9RJxDMYLl4cAJNYuPBtYGPpuZd03OjIjty3WvrKnnTY3qj4gDKZJkZ2fmu7v+B0iSJEmSJKkjVVuSDcJ6wOsj4uTM/FMPt/MG4BLgUxGxO3AF8AxgN4rHLI+qK39FOW34XKUkSZIkSZJmjjmDDqAF7wPeA6zo5UYy8/fAQuBkiuTYkcDWFCN67piZN/dy+5IkSZIkSRqctluSRcSTKUad3BJYKzMPqVk2F9gEyMz8S4cx3gSslpn3d1jPtMqWage1WLblFmSZeTJF8k2SJEmSJElDqHKSLCLWB04C9p2cRdGZ/yE1xeYC/wdsGBFPyczfdhDj/wHPjYiNbM0lSZIkSZKkXqj0uGXZQux7FAmyceBs4GEjTWbmOPDFsv6XdhjjZ8t6/q3DeiRJkiRJkqSGqvZJdgiwI3ANMC8z9wFua1L2G+V0lzZjAyAzvwEcB7wzIj4aERt3Up8kSZIkSZJUr+rjlq+ieLTyiMy8fpqyvwQmgO3bCWxSRJxX/ngXRWf6R0TE1cANwINNVsvM3L2T7UqSJM1GixYtGnQIkiRJQ6lqkmwHiiTZOdMVzMz7IuI2YKN2Aquxa93vqwHzylfTzXe4TUmSJGlkLV68eNAhSJLUd1WTZGPAHZl5X4vl5wIPVNxGvaM7XF+SJEmSJEmaUtUk2U3AoyJincy8c6qCEfF4YB3g6naDA8hMk2SSJEmSJEnqqaod9/+8nL6ghbL/Wk5/UnEbkiRJkiRJUl9VbUl2EvBPwAcj4ifNOu+PiNcDb6boG8wODSRpwOyoW5I0lU6uE/X9l3nNkSTNVJWSZJl5dkR8A9gPuDQiTgPWAoiIRcCWwAuBJwEBfC4zf96sPkmSJEmSJGkYVG1JBrA/cA/wauCImvn/WU6jnJ4EHN5+aGVlEQ+2sVpmZjt/myRJkiRJkkZQ1T7JyMx7MnN/YBfgVOD3wN3AfcAfgdOAXTPz0MzsdGRLKJJu7bwkSZIkSZKklrTd2iozLwIu6mIszew2zfL1gWcAr6NIjh0O/LXXQUmSJEmSJGn2GPpHEjPzxy0U+3ZEHA+cDxwNLOxtVJIkSZIkSZpNKj9uOawy8waKVmTzgP834HAkSZIkSZI0gzRtSRYRB3RrI5l5SrfqmsaPKQYVeCnw7j5tU5IkSZIkSTPcVI9bngxkF7aRQF+SZJmZETEBbNGP7UmSJEmSJGl2mCpJ9keaJ8k2AcbKnx8Abi5/3qimzruAmzoNsIqIWFDGdUs/tytJkiRJkqSZrWmfZJm5VWY+vv4FfASYSzGy5fOAdTPzUZn5KGCdct5PyjIfKdfpuYh4GnAqRWLv4n5sU5IkSZIkSbNDpdEtI+K5wKeBbwEvz8yJ2uWZeR/ww4g4F/g68OmIuDIzL2g3wIg4b5oiawKPAx4NBHAf8O/tbk+SJEmSJEmjp1KSDDiSIhF1RH2CrFbZN9iRwH7AW4EL2o4Qdq1Q9lrg9Zn5iw62J0mSJEmSpBFTNUm2ELg1M/80XcHM/GNE3Ao8rZ3Aahw9zfIHgJXA/wGXZGY3BhuQJEmSJEnSCKmaJFsXWC0i1igfrWwqItYA1gYebDc4gMycLkkmSZIkSZIkdaRqkuwPwPbAAcDnpyl7AEXn/Ve3EZckSZKkGWDRokWDDkGSpK6omiT7KvAB4FMRcX9mfqlRoYg4APgUxUiTX60aVESsDowBZObtLa6zXvnjXZnZUes1SZIkSZKkqSxevHjQIQB+WdFNcyqWPxa4nGJEyZMiYnlEnBwRx5SvkyPiD8AXyzL/V65T1dco+hk7ucI6J7WxjiRJkiRJklStJVlm3hMRuwNfAPYFtgD2rysW5fTbwMGZeU+VbUTEE4GXALcBB1dY9XXA7sCrIuIDmbmsynYlSZIkSZI0uqq2JCMzV2bmS4BnAJ8ALgKuKl8XlfN2zMx9M/OWNmJ6dTk9MTNvrRIXcALF3/SaNrYrSZIkSZKkEVW1T7K/ycxfAL/oYiyTnk3Rl9k32lj3v4F3A7t2MyBJkiRJkiTNbpVbkvXBdsAE8Ms21v1Vue72XY1IkiRJkiRJs1rbLcl6aAPg1szMqitm5kRE3Aqs3+2gJEmSJEmS1D/1I4j2eiTPtpJkEbEu8ELgycAjgblTFM/MPKRC9ePAuu3EVVoHuLuD9SVJkiRJkjRiKifJIuJA4HiKZNTfZjcomuX8BKokyW4AtomIrTPz9xVj2xpYA7i2ynqSJEmSJEmd6HUrp0n1ravUPZWSZBHxPOALFMmve4CfAtcDD3Qxpp8B2wAvAT5Wcd39yunPuxiPJEmSJEmSZrmqLcneTpEg+ynw4sy8qfsh8V1gf+BtEfHlzPxLKytFxKOBt1K0XPtuD+KSJEmSJEnSLFV1dMsFFEmoA3uUIAP4BrAM2Aj4QfkI5ZQiYhvg+8DGwNXAGT2KTZIkSZIkSbNQ1STZ6sCdmbmsF8FAMUIl8FrgPuCJwK8i4rMR8fyI2Dwi1ihfm5fzFgOXA08C7qVI4FUeGVOSJEmSJEmjq+rjlr8H5kXEapn5YC8CAsjMn0XEy4FTgfWAQ8tXMwHcCeyfmT/tVVySJEmSJEmanaq2JPsyMBd4fg9ieYjM/A6wkOLRycmRMhu9siyzIDPP6nVckiRJkiRJmn2qtiT7JMUIkidGxNJePnYJkJlXA6+IiE2B3Sgev9yoXHwz8Fvg/My8oZdxSJIkSZIkaXarmiR7FcUjkB8A/i8izgR+Dtwx1UqZeUp74f1t/RuA0zupQ5IkSZIkSWqmapLsZIrHG6F41PHV5WsqCXSUJJMkSZIkSZJ6qWqS7I+sSpJJkiRJkiRJs0KlJFlmbtWjOCRJkiRJkqSBqTq6pSRJkiRJkjTrmCSTJEmSJEnSyDNJJkmSJEmSpJE3ZZ9kEXFehbruBm4ElgDfzMzrOglMkiRJkiRJ6pfpOu7flWI0y2ihrslRL/cHjo2ITwDvysyJ9sOTJEmSJEmSem+6JNmFrEp+TWcMeAzwaGAu8DZgQ+D1bUcnSZIkSZIk9cGUSbLM3LVqhRGxFfD/gNcBh0bElzLzkraikyRJkiRJkvpgupZklWXmcuD1ETEHOAQ4GDBJJkmSJEnSFBYvXjzoEKSR1svRLT9aTnfq4TYkSZIkSZKkjvUsSZaZy4Bxij7KJEmSJEmSpKHV9cct69wDrNvjbUiSJEmSJGkIdfMx4k7qWrRo0bRletaSLCLWAjYAVvZqG5IkSZIkSVI39LJPsr3L+n/bw21IkiRJkiRJHevJ45YR8XjgOCCB7/ZiG5IkSZIkScPC0UlnvimTZBGxS4W61gIeA+wMvAxYG/gL8Pm2o5MkSZIkSZL6YLqWZBdQtAarKij6ItsvM+9oY/2+i4jHAh8A9gI2okjwfQs4OjNb6lctIt4G7Ab8PbAxMAFcC/wQOC4zr+t+5JIkSZKkmaiVjsSbqW+11EldkgqtPG4ZFetcCZwBHJOZf6oeUv9FxNbAJcCmwFnAlcDTgTcDe0XETpl5cwtVvR64E/gx8FdgLvAPwBHAIRGxa2b+sgd/giRJkiRJkjowXZJstwp13Q3clJnXdBDPoJxIkSB7U2aeMDkzIo6jSHAdAxzWQj1Pysx76mdGxOuAxWU9e3clYkmSJEmSNDC23mtPv/ZbO33ETZkky8wftx3NDFG2ItsTWA58pm7x+4BFwP4RcWRm3jVVXY0SZKWvUyTJtu0sWkmSJEmSJPXCnEEHMAQmW8udk5kTtQvK/tQuBsaAHTvYxovK6a86qEOSJEmSJEk90kqfZLPdvHJ6VZPlyyhamm0H/KiVCiPiUOCxwDrADsAeFB34v7OjSCVJkiRJktQTJslg/XJ6W5Plk/M3qFDnocAzan7/BfDPmXn1VCtFxCKKxzvZYostKmxOkiRJkiRJnfBxyx7IzB0zM4CNKVqhASyJiOdNs97izFyYmQs32WSTnscpSZIkSZKkgkmyVS3F1m+yfHL+rVUrzsybM/OHFImyu4FTI2KtyhFKkiRJkiSpp0ySwdJyul2T5ZMjUjbrs2xamXkr8FNgE+CJ7dYjSZIkSZKk3jBJBueX0z0j4iH7IyLWBXYCxoGfdbidx5TTBzqsR5IkSZIkSV028kmyzPw9cA6wFXB43eKjgbWBUzPzrsmZEbF9RGxfWzAitoiIzRptIyJeDzwN+BPw6+5FL0mSJEmSpG5wdMvCG4BLgE9FxO7AFRSjU+5G8ZjlUXXlryinUTNvPnBGRPwUuBr4K7ARsCOwA3AnsH9mPtirP0KSJEmSJEntGfmWZPC31mQLgZMpkmNHAlsDxwM7ZubNLVRzWVn+EcALgLcCrwIS+Djw95n5464HL0mSJEmSpI613ZIsItYAngo8luKRxGhWNjNPaXc7/ZKZfwIOarHsw/7WzPwjRWJMkiRJkiRJM0zlJFlEPAI4BlhEkRybTgJDnySTJEmSJEnS6KqUJIuI1YEfAM+maDl2A7ApMAFcD2wMrFkWvxNo5TFFSZIkSZIkaaCq9kl2CLALRUJsYWZuXs6/ITO3ANah6Oz+EooE3Lsz8/HdClaSJEmSJEnqhapJssmO6I/KzMvqF2bmRNk5/XOAi4CTImJ+52FKkiRJkiRJvVM1Sfakcnpm3fzVan/JzAeBfwPmYmf2kiRJkiRJGnJVk2TrArdl5njNvPsoHrN8iMz8DXAHRf9lkiRJkiRJ0tCqmiS7gbpWYxSd868ZEZvWzoyIANYANmk/PEmSJEmSJKn3Ko1uCVwHPD0iNsjMW8t5vwE2B/YCTqkpuyvwCODGDmOUJEmSJEnSLLB48eJBh9BU1ZZkvyinz6qZ900ggGMj4mURsW1EvBT4EkUn/+d1HqYkSZIkSZLUO1WTZN+iSIi9smbeFyhak20MfA24EjgdeCxwF3B0x1FKkiRJkiRJPVT1ccvzgccDD0zOyMz7I2J34JPAPwFrUrQguwh4S2Ze2Z1QJUmSJEkSwKJFiwYdgjTrVEqSZWYC1zaYfyPw6ohYnaKj/tsz867uhChJkiRJkqSZqJOEbn3/Zb1ODldtSTalzHwA+Es365QkSZIkSZJ6rWqfZJIkSZIkSdKs01aSLCIeGxHHRcRvI+LOiHigbvmGEfGuiPh/5SOYkiRJkiRJ0tCqnMCKiH8Evg6sRzHSJRQd9f9NZq6MiH2BBcBvgW93FqYkSZIkSZLUO5VakkXE44AzgfWB7wAvBVY2KX4SRRLtBZ0EKEmSJEmSJPVa1cctjwTWBb6emftm5n8D9zUp+4Ny+rR2g5MkSZIkSZL6oWqS7HkUj1a+Z7qCmfkH4F7g8W3EJUmSJEmSJPVN1STZFsDdmbmsxfJ3AmtX3IYkSZIkSZLUV1WTZBOtrlOOarkecHvVoCRJkiRJkqR+qpokuxZ4RERs0ULZXYC5QKutziRJkiRJkqSBqJokO7ecHjZVoYiYCxxD0X/Z99qIS5IkSZIkSeqbqkmyT1CMZnlkRBzSqEBEzKdIpj0DuAM4saMIJUmSJEmSpB6rlCTLzGuBQ4HVgMUR8VdgQ4CIuCQi/gz8Ang28ABwQGbe1N2QJUmSJEmSpO5aveoKmfmViLgB+AywTc2iHWt+vho4LDPP6zA+SZIkSZIkjaBFixb1dXuVk2QAmfnDiJhH0Tn/TsCjKVqXrQAuBs7PzAe7FqUkSZIkSZLUQ5WSZBFxQPnjDzLzr8CPy5ckSZIkSZI0Y1VtSXYyRV9jG3Q9EkmSJEmSJGlAqibJbgHIzPEexCJJkiRJkiQNRKXRLYErgfUjYp1eBCNJkiRJkiQNQtUk2ckUHfQf2v1QJEmSJEmSpMGo9LhlZn4+Ip4HfCQi7gMWZ+YDvQlNkiRJkiRJ6o+qo1ueBNwJ3AucAHwgIn4B3AA82GS1zMxDOopSkiRJkiRJ6qGqHfcfCCQQ5e+PBJ7XpOxkuQRMkkmSJEmSJGloVU2SnUKR9JIkSZIkSVKbxsfHOffcc9ljjz0YGxsbdDiiep9kB/YoDkmSJEmSpJGxZMkSVqxYwWWXXcbOO+886HBE9dEtJUmSJEmS1IHx8XGuuuoqAJYuXcr4+PiAIxL0MEkWEXMi4kUR8a1ebUOSJEmSJGmmWbJkCZlFb1aZyWWXXTbgiAQ9SJJFxLYR8WHgOuBbwIu6vQ1JkiRJkqSZ6uqrr2ZiYgKAiYkJli1bNuCIBF1KkkXEWEQcGBE/Aa4E3gZsTjG65ZXd2IYkSZIkSdJssM022zBnTpGSmTNnDttuu+2AIxJ0mCSLiB0j4nPAX4AvAM+iSIwtBT4IPDkzn9hxlJIkSZIkSbPEggULiAgAIoL58+cPOCJBxdEtASJiE+AA4GBg+8nZ5TSBp2Xmku6EJ0mSJEmSNLuMjY2x3XbbccUVVzBv3jzGxsYGHZJoMUkWRXpzb4rE2AvL9QK4m6LfsS8B3y+LX9H1KCVJkiRJkmaRBQsWsHLlSluRDZEpk2QRsTVFYuy1wKMoEmMJXAScAnw9M+8oy/Y2UkmSJEmSpFlibGyMffbZZ9BhqMZ0LcmWUSTFAvgDRWLslMz8Q68DkyRJkiRJkvql1T7JPgW8PTPv62UwkiRJkiRJ0iBMN7rlvRStyP4VuD4iPhMRO/Y+LEmSJEmSJKl/pkuSPQp4E/Ar4JHAvwAXR8TSiHhXRGzR6wAlSZIkSZKkXpsySZaZt2bmpzPzH4AFwH8CtwHbAh8EromI8yLioN6HKkmSJEmSJPXGdC3J/iYzf5mZh1O0Ltsf+DHFo5i7Ap+vKbpnRLTa15kkSZIkSZI0cC0nySZl5r2Z+ZXMfC6wDXAM8OdycQDfAG6IiC9GxN4mzCRJkiRJkjTsKifJamXmHzLzPcCWwN7AfwMPABsABwDfAf7aYYySJEmSJElST3WUJJuUhe9n5kuBxwBvBa6gaFm2QTe2IUmSJEmSJPVKV5JktTLzpsw8LjOfBDwL+EK3tyFJkiRJkiR1U0/7C8vMnwE/6+U2JEmSJEmSpE51vSWZJEmSJEmSNNOYJJMkSZIkSdLIM0kmSZIkSZKkkWeSrBQRj42IkyLi+oi4NyKWR8QnI2LDFtdfOyJeHRGnRcSVEXFXRNwREZdGxJERsUav/wZJkiRJkiS1p6cd988UEbE1cAmwKXAWcCXwdODNwF4RsVNm3jxNNc8GvgzcApwPfAvYENgHOBZ4SUTsnpn39OSPkCRJkiRJUttMkhVOpEiQvSkzT5icGRHHAUcAxwCHTVPHCuA1wBmZeV9NHW8FLgCeBRwOfLyrkUuSJEmSJKljI/+4ZdmKbE9gOfCZusXvA+4C9o+ItaeqJzMvz8yv1CbIyvl3sCoxtms3YpYkSZIkSVJ3jXySDNitnJ6TmRO1C8oE18XAGLBjB9u4v5w+0EEdkiRJkiRJ6hGTZDCvnF7VZPmycrpdB9s4uJx+v4M6JEmSJEmS1CMmyWD9cnpbk+WT8zdop/KIeCOwF3A5cNI0ZReVo2FeeuONN7azOUmSJEmSJLXBJFkPRcRLgE9SdOq/X2beP1X5zFycmQszc+Emm2zSjxAlSZIkSZKESTJY1VJs/SbLJ+ffWqXSiNgX+BpwA7BrZl7TTnCSJEmSJEnqPZNksLScNutzbNty2qzPsoeJiJcBZwB/BZ6TmUunWUWSJEmSJEkDZJIMzi+ne0bEQ/ZHRKwL7ASMAz9rpbKIeDXwVeB6igTZsmlWkSRJkiRJ0oCNfJIsM38PnANsBRxet/hoYG3g1My8a3JmRGwfEdvX1xURrwVOAf4I7OIjlpIkSZIkSTPD6oMOYEi8AbgE+FRE7A5cATwD2I3iMcuj6spfUU5jckZE7EYxeuUcitZpB0VE3Wrcmpmf7HbwkiRJkiRJ6oxJMorWZBGxEPgAsBewN/AX4Hjg6Mxc2UI1W7KqZd7BTcpcSzHapSRJkiRJkoaISbJSZv4JOKjFsg9rIpaZJwMndzcqSZIk6aHGx8c599xz2WOPPRgbGxt0OJIkzRoj3yeZJEmSNJMsWbKEFStWcNlllw06FEmSZhVbkkmSJGngbB3VmvHxca666ioAli5dyvz5891fA7Z48eJBh/AwxtSaYYxpWA3jvhrGmIaR+6kaW5JJkiRp4Gwd1ZolS5aQmQBkpvtLkqQuMkkmSZKkgapvHTU+Pj7giIbX1VdfzcTEBAATExMsW7ZswBFJkjR7mCSTJEnSQNk6qnXbbLMNc+YUt/Bz5sxh2223HXBEkiTNHjF5Q6LhsnDhwrz00ksHHYYkSVLPffGLX+T+++//2+9z587loINaGnR85IyPj/PVr36VBx98kNVWW41XvepV9kmmWae+D6VFixYNKJJVhjGmYeR+Grxh6YNsmN/7iFiSmQsbLbMlmSRJkgbK1lGtGxsbY7vttgNg3rx5JsgkSeoiW5INKVuSSZKkUWHrqGocCVSSpPbZkkySJElDy9ZR1YyNjbHPPvu4nyRJ6rLVBx2AJEmStGDBAlauXMn8+fMHHYokSRpRJskkSZI0cJOtoyRJkgbFxy0lSZIkSZI08kySSZIkSZIkaeSZJJMkSZIkSdLIM0kmSZIkSZKkkWeSTJIkSZIkSSPPJJkkSZIkSZJGnkkySZIkSZIkjTyTZJIkSZIkSRp5JskkSZIkSZI08kySSZIkSZIkaeSZJJMkSZIkSdLIM0kmSZIkSZKkkWeSTJIkSZIkSSPPJJkkSZIkSZJGXmTmoGNQAxFxI3BtF6raGLipC/V02zDGZUytMabWDWNcxtQaY2rdMMZlTK0xptYNY1zG1Bpjat0wxmVMrTGm1g1jXMbUmm7GtGVmbtJogUmyWS4iLs3MhYOOo94wxmVMrTGm1g1jXMbUGmNq3TDGZUytMabWDWNcxtQaY2rdMMZlTK0xptYNY1zG1Jp+xeTjlpIkSZIkSRp5JskkSZIkSZI08kySzX6LBx1AE8MYlzG1xphaN4xxGVNrjKl1wxiXMbXGmFo3jHEZU2uMqXXDGJcxtcaYWjeMcRlTa/oSk32SSZIkSZIkaeTZkkySJEmSJEkjzySZJEmSJEmSRp5JshkoIg6MiJzm9eA0dXy+puw2XYrrpRFxQkT8JCJuL+v+cpOyj4uIEyPi5xGxIiLujYjry3UPioi53Yip3NbyKfbTigblHxERh0fE/0bETRFxZ0RcERGfiogtuxjXCyLinIi4LiLujohrIuKMiHhmg7LrRsQxEXFlRNwTESsj4gcRsXu34qnZ1u4R8c269+UHEbH3NOt19Zhq5zjv9X6KiI0i4tBy/1xdvm+3RcRFEXFIRDzsnNrH4yki4nXlZ+rOiLgrIi6NiMMaxdVg3R/W7NfVuxRT1c9e347zuu2+piauQxssXy8i3hURl0fEreV7/uuI+GBEbDKImOrK9uT9qxpTRGwWxTXgD+W548byszK/izF8JCJ+FBF/Kj9/t0TELyPifRGxUQvrd/s81c45oefHeVS4HjdZf6Dn8+jjPUKFv6Hlz2QXtznt9bhf+6rqMdXr47ydz16DOto6ztv5fEXEsyLif8pz1t0R8auIeEtErNag7A5lbL8sz6P3lue8cyPiJRERrcbaTrzRp/uWcltV7oX7FleDbXd07elRTBFt3vd1uN127s8H8t7FFOftbn/Opoih0rET/blHaDmm6N81ptL/DA3W7+59i32SzTwR8VRg3yaLnw08Fzg7M1/YZP0XAd8G7gTWAbbNzKu7ENflwFPKeq8Dtge+kpmvaVB2V+As4OfANcAtwEbA84HHAecDe2bmA12IazmwAfDJBovvzMxja8quDlwA7ARcCZwL3As8DdgFuA14Vmb+rsOYPgK8HbgZ+BZwE7ANsA+wOnBAZn65LLshcBHw98Bvy5jWAV4MbAwcmplf6CSemrg+CryN4v37XhnXJsAC4NzMfHuT9bp+TFU9zvuxnyLiMOA/gb9QHKN/BDYDXgKsD3wDeFmWJ9Z+HU/ltr4C/DNwA8V7MQ78I/AE4NTMPGCKdf8V+ARwP7AmMHcAn72+Hed1MT4O+DWwWrm912Xm52uWrw/8L7AdcGkZIxTv33yKz8rCzPxrv2JqUL4n71+VmCJiK+AS4FEU++siinPHS4A1gBdl5g+6EMd9wGXA7yiO9bWBHYGFwPXAjpn5pybr9uI8VfWc0JfjvMr1uMG6w3A+35U+3SO0oupnskvbbOl63K99VfEeb+iuxw3Wb/s4r/r5iogXl/HcA5xO8R69CJgHnJmZL6srfyBwLPAz4FqKe4XNy3U2Zppreifx9vm+pcq9cN/iahJr29eeXunkvq/D7T6Vaufzgbx3Ldy3HEgXP2dTxNHysdPHe4QqMe1Kf64xy2nxf4YG63Y/t5GZvmbRC/gpkMA+TZZvAqwAvkZxwkpgmy5tezdgWyCAXcu6v9yk7BrAnAbz51J82BJ4eZfiWg4sb7Hsy8ptn1sfH3B0ueykDuPZHHiwfB82bbAPE7imZt7x5bxvAKvXzN+U4qZwHHhsF/bT68rtnAys0ei96fcxNUWsDzvO+7GfKC78L2pwbGxebiOB/fp5PJV1/dPkcQNsXDN/DeA75bKXNFl3XrlvPlx+VrJ2/3UYV5XPXl+O87ptRvne/B74WLn9Q+vKvK3Z+1R+VhJ4bz9j6tf7V3E/nVXOP57yC7hy/nbA7RQ3XWt3IZY1m8w/ptz+iU2W9+Q81cY5oV/n85avx/3YT9Nss9H5vG/3CC3EV+kz2aVttnw97te+qnJM9eM4r/rZqyvT0XFecV+sR/FP6L0UX6hMzl+T4ouFBF5Zt84jpqjrd+U6T+9RvP26b6l6L9yXuKaIt61rTw/jafu+r8dxNTqf9/29o7X7lq5+zrpx7NC/e4QqMfXrGrOcFv9nqFuvJ/ctPm45i0TEDhRZ4D8DZzcpNjls6uHd3n5mnp+Zy7I8Yqcpe19mTjSYfz/Ft0lQXND77e/K6dkN4jurnHb6eNWWFI86/zwzb6hdkJnnA3fUbeOfyul7syZLX657HLAWcHAnAUXEIyhOjH8EFmXmffVlyvemkZ4dU41McZz3fD9l5nmZ+Z36YyMzVwD/Vf66a82ifhxPsOpv/3hm3lQT133Ae8pf31i/Uvnt3qkUN1nv60Icnej5+9fAmyj+0ToIuKtJmcn38DsNln27nHbzkctWYgL6+v5NGVNErEnxjeIE8O7aa0BmXgWcRNHCbL9OA8nMe5os+no5bXbd6Ml5qo1zQl+O8yrX4zpDcT4fsnuElj+T3VD1etyvfVXxmBrG63Gtjo7zivvipRTXiK9l5qU1ddwDvLv89V/q6r+3yXZvByZb5Lb8nlaMt1/3LVXvhfsVV0MdXHt6pa37vl6a4v58EO/dtOftbn/Omql47PTrHqHlmIbsetxIT+5bTJLNLovK6Rcy82F9kpXNSvcFXp+ZN/cxrpZF0TfDZF8bv+pi1Y8on0t/V0S8OSJ2iwb9QFA0bQV4fjz8ef7Jx1fP7TCWZcB9wNMjYuPaBRGxC7Bu3TY2L6fXNKhrcl6nz6n/I8UF6r+BiSj6iHhHua8e1i9ETbwH0v9jqtlx3o/9NJXJf1pqmxv343iC1v72Z0fEGnXL3g38A3Bgs5uFLmj1s9fX9y8inkDR+ur4zLxwiqKT7+ELGizr5ntYJaZJPX//WozpkRTfKN6UmXc0WN6Pz9+LyunDrhsDvPY1OicM+jzV1JCdzxvq4T1Cs+1V/Ux2Q1vX43r93ld1Bn2cN/rsAQM5zp9bTr/fYNmFFC1DnlUmR6cUEWM19f26O+E9TL/uW6reC/crrqqaXnt6rN37vl5qdj7v63vX6Xm7T58zaHzsDPrc2fLx3KNrTKv/M0zGcCA9Op/3pHNf9V9ErAW8hqLp8sP6yYiiU8TjKZpXn1W/fFDKC+MbKZrFbkJxc7gNcFpmNmq50a7NKVpc1PpDRByUmT+umXc2xY3pS4BfR8S5FBfxBcDOwAnAZzoJJDNviYh3UHwj8LuI+BZFfwxbU/TD8EPg9TWr3ETRCuPxFM1/a01+OzOvk5go+gWAor+MXwJPql0YERcCL83MG2vm9f2YmuY478d+ahbX6sBkvwW1N8I9P55Kk98iPr7Bssm/ffXy5yvLmJ8GHAV8uPbb7R5o9bPXt/evpgXWH4F3TVP888CrgEPKb0kvLuc/m6LPiKO6cfxXjKkv71+FmFZSfCY3joh1MvPOuuVd//xFxFsp+p1Yn6IPjZ0pbtI+XFduINe+Kc4JAztPTWUIz+eTZfp1j9Bo25U+k11U+Xpczh/YvmpgGK/HgzofTP6dV9UvyMwHIuIPwBMp9ssVtcuj6Hz6NRR9Km1G8WXNo4EPZWavkjJ9uW9p4164X/dTU2r12tMHle/7emma83nf3rt2ztv9+py1eOz09dxZ5Xju0zWm1f8Zen8+zy49++trsC/gtRTP4H63wbI5FM/o/hnYsGb+BfSovxFa7AOFovPQrHlNUDw73rD/qzZjeR/FNwKbAWMUN5z/VW5rHHhKXfkA3k/xDWRtbOdSdGTYrbj2pej8sHYby4B/riv3uXLZGcBqNfM3oehoMoF7O4zlP8t6HqA4Oe5McdLcgaLJcQIXDPKYauE47/l+miKuY8v6z26wrOfHE/Dqss6rgUfWzJ/Lqr6iEnhmOX8tipumy3lo3zbL6W6fZC1/9vr5/gEfoLiRe2bNvPfTpK8h4BFl3Fn3OgP4+37H1Mf3r0pMPyznH1c3fxuKPskSWNqNuMp6V9S9F98DNqsrM5DzVLmNhueEfh7nNXXvytR9EA3d+bymTM/vEabYdqXzRBe3W+l6PIh91cIxNXTX414d5y3si6umqp/ii5e/XZ/rlu1V957eC7yVmn4fux1vWaYv98HltvalhXvhfsc1RbzTXnv6FEel+74+xDPl+bxf7x1tnLd78Tlr99ihz+fOKsczPb7GUO1/hp7ft/T8Q+OrPy9WXWRf1GDZkeWyvevmd+1AarDNXWkhSVZTfjVgC+DNFKOL/LT2pN+jfTZ5I/XNmnlrUjyPfQfFN1ibU3Tg+HxWNQ1/cRe2/fbyQnEcxTcDYxQj5U3eAH+0puyjWNUJ7a8pRv34HEVHsL8s59/dYTyfLeu5B9iqbtkY8CcemmTp+zHVwnHe8/3UJKY3lXVfUX/M9vF4Wo3iG/OkuOB9luLbld9S3HxOXlifUZY/odz2U+rqWU4XkyxTxNvos9eX9w94RvnZ+2jd/PfTOPmzUXlcrwBeUf6+UfnzivK97ahj1zZi6vn710ZMTwRuLZf9tHyPv0Qx0tDk+3dFD46lzSj68FhKMTjA/JplgzpPTXVO6Pt5iun/iR+683mDsn29R6h6/Hd525Wux4PYVy0cU8N4Pe7Jcd7Cvmg7SVZTZi5FC6v3Upz7v0ODAR26FG9f7lvKbVW5F+5bXC3G3vTa06ftV7rv60M8U92f9+teuKPzdjc/Z+0eOwzu3Nny8Uz/r8eN/mfo+X1LT/4YX/19UfxzkhQ3TqvVLduO4kar0chsXTuQGtS9KxWSZHXrvrJc99M93m/blNu5uWbe5In0TQ3KP6VctrxL++a/Gywboxie+0Hg72rmbwZ8muKf4PvKE9gJNX/DtR3G9JGynp82Wf75cvmbB3hMNT3O+7WfGmzvjWW9vwU2b7C858dTTX1zgXdQXFTvoUhYfIvim5/flNt6PPAcim9lHjYiI/1Lkj3ss9en43x1ihuA31E3qhHNkz8nl/MfNmIwxZDcSYNWHb2KqR/vXzv7qVy2NUVi7Pry/VsOfJCiJUwCP+7hMbUlxbe/vyl/H9R5aspzQj+O8wbb25Um1+MB7qdpz+dTrNvTe4R2j/8ubr/l6/Gg9tVUx1RNmaG5HvfyOJ9uXwC/KJcvaLJ88vr8hBa3986y/Ft7FO/kMd7T+xYq3gv3K642/o6HXHv6vO2W7vv6EMeU5/N+vHd0+bzd6eesk2On3+fOVmKaonzP/2en7n8G+nTf0pM/xld/X6waLvb9DZbtWy5r5bVvF2OavPi1kyRbv1y3pxecmu3cUzPv0nLeDk3WmWwSvlEH253MiP9rk+X/XS5vOHR5XdnnlmXP7HBfHFzW870myyeHT37nAI+ppsd5v/ZTXZ1vYdU3PZs2KdPz46mFONcsL3g31sXdyuupPYrpYZ+9frx/wAYV/vZPluvcVP6+boP61iuX3dGvmPrx/rWzn6apb/L8cmyvjvNyO78st7MxAzhPtXJO6Mdx3qDeXWlyPR7Efiq328n5fPL80ZN7hG4f/21sv+Xr8aD21VTHVAvr9v163MvjfLp9AXy5XP6qBstWpxh5737q/rGfYntPKetr+phyh/H25b6FivfC/Yqrzb/lb9eefm+7STwPue/rw/amPJ/3473r9nm7089ZL46dXpw7uxBTT6/Hddu4p/y9Z+fz2pcd989wEbEmsD/Fty1faFBkeZP5UHRMuDnFc8+3l2WHwWPK6cNGJeqyHctp7Qgik6MLPWwo4nLkoXXLXx82JHsFTbdRN7+VbUx2TntaB/EA/IjiZPL3ETEnHz7U72THwX9gAMdUC8f5dLq1nybjeQdFp5aXA/+YNcNv1+nH8TSdVwJrAF8tf/8NzffhKyj6vjmJ4njo1chfjT57U+nW+3cvzf/2+RQjRV5E8W3kT8v5te9h/ciNVT6r3Yrp5inKd+v9a2c/TWX/ctqVz98UHl1OH6TP56kK54SpdPU81aLlzLzzea/vEbp9/FdV5Xo8nX7dT1UxiOvxcgZ3L3weRf9Re7HqOjxpF4pWUxdm6yMU9/o97dd9S9V74WG4n2qm9tozDOrv+3qmxfN5P967bp+3+3XurHLs9OseoUpM/dhP9f8zLKcf5/NeZiJ99f5FcWJK4DttrHtBuW7fH7ekOGE1apK7Dqs6gD6mC3E8AVi7wfytKJ6DT+BdNfNPLOedy8Ob636oXPa/Hcb08rKeFcBj6pY9n+JRqrspv1Gh6JxwnSbv/QRFPwBzurCvJjv6PKJu/p7ldlYC6w/imGrlOO/jfnpPGculTPMMfj+Op5r61msw76nAjRTf0j26hTqWlzF1o0+rqp+9vrx/U8T7/jKm+sct/6ec/6Xa7VP0yTDZQuDr/YypH+9fG/vpEQ2O8aAYgTOBr3Vh29s1OgeVx84x5XYubqGerp6nKp4T+n6c02arn27vp7q/dbrzeV/uEdqIvdJnsoPttHw9HsS+mu6Y6tdxXuWzN0UdHR3nLeyL9Siuw/cCC2vmrwlcUq77yrp1FjapaxOKwRwSeF2P4u3LfQvV74X7dj/VINauXHt6EFfH931diKGV8/nA3rtyG++n8X1Lzz5n7R47/Th3thFTz68xVPyfYYp6LqBL9y22JJv5FpXTxQONAoiIfSmaQEKRxQV4ZkScXP58U2a+tfz5vcBOEXEJRQeF48DjKC6MG1DcOHyoC2G9AjiyHDL9WoqWIFtTZJrXpPgH+Nia8scALwJ2B66MiO9TXKR3Ap5e/vzmDmM6k+JCsQdwRUR8k+Im4QnACyn+sXxnZk62AhkD/hoRPwR+T3GS3Al4JkXntC/Lh3/T3I7DKb5pOS4iXkDR3PbxFO/pgxQXl9u6sJ12tHKc93w/RcRrWTVyzk+AN0VEfbHlmXly+XM/jqdJP4yIuylait1BcTy9oNzGizLz+i5tp1VVP3v9Os6regfwLIpv8BZExHnl/N2Bv6d4HLOlYcZnuW2Bn5Tv33KKvlJ2pxiR7yJWfYY7sTfwoYi4iKIVzc0UfXc8h6LT5xXA67qwnZa1cU7oy3Fe8Xrcb62cz/t1jzCsqlyP+7KvKh5Tw3g97poq+yIzb4+I11Hc+10QEV+jSGDsA8wr559et4nPR8RGwP9SvKcPUvyzuDfF6Mbfomgx3PV46d99S9V74X7eT9UbumtPaRju+1o5nw/yvZtKVz9nTVQ9dvpxj1A1pn5cY6r+z9B7nWbZfA3uRXEyTNro+LZc/wK6+236+5n6ueDlNWVfQNEK4yqKkTHupxi541yKE25XWkJQfOC/ClxJ0aHl/RTfsPyQ4p/ehw3vS/ENwrEUJ6N7KJr/Xgt8Edi+S3HNpehD42cUzUEfKP/+7wJ7Nij7BYomwneVr8sp/jEf6/IxtQlF55DXln/3TcA3aXH0vm4fU1WO837spxaO8aSuE/d+HE/ldt4GLCmP83spmiV/BnhshTqW072WZJU+e/08zqd5bxt1SP94imGof1/u23sovtk6gbpvwPsVU6/fv6oxlcf5V8rj7m6K89rPKP7Z79b5/EkUndleXp6bHqC4fvyijKulliTdPE9VPSf06zhvIa7l/dxPNXW2ej7vyz1Ct47/Hm2rpetxv/ZVlWOqH8d51c9eN4/zdj5fFP/o/g9FK8C7KfpPO6LR5wB4DUUS6RqKEYInO+/+LsU/kw+7d+1mvPTvvqXle+F+xtVgu1259vQgro7v+zrcfsv/hw7qvSu3PXn819+3dPVz1o1jh/6cO6vG1PNrDG38v96kngvo0n1LlBVKkiRJkiRJI2vOoAOQJEmSJEmSBs0kmSRJkiRJkkaeSTJJkiRJkiSNPJNkkiRJkiRJGnkmySRJkiRJkjTyTJJJkiRJkiRp5JkkkyRJkiRJ0sgzSSZJkiRJkqSRZ5JMkiRJkiRJI88kmSRJkiRJkkbe/wc3Bz2WSMpu7AAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 1440x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "num_to_print = 30\n",
    "aupr_sorted = sorted(performances, key=lambda x: np.mean(x[0]['aupr']),\n",
    "                     reverse=True)\n",
    "#aupr_sorted = performances\n",
    "indices = np.argsort([np.mean(p[0]['aupr']) for p in performances])[::-1]\n",
    "#indices = list(range(1, len(performances)+1))\n",
    "fig, ax = plt.subplots(figsize=(20, 8))\n",
    "#fig = plt.figure(figsize=(14,  8))\n",
    "n_best = aupr_sorted[:num_to_print]\n",
    "#indices = list(range(1, 21))\n",
    "c = 'black'\n",
    "x = seaborn.boxplot(data=[i[0]['aupr'] for i in aupr_sorted[:num_to_print]],\n",
    "                    linewidth=4, showcaps=False, showfliers=True, color='white'\n",
    "                   )\n",
    "#x = seaborn.swarmplot(data=aupr_only[:num_to_print])\n",
    "x.set_xticklabels(indices[:num_to_print])\n",
    "ax.set_ylabel('Area Under Precision-Recall\\nCurve (AUPR)', fontsize=25)\n",
    "#ax.set_xlabel('Indices of Grid Search Run', fontsize=25)\n",
    "plt.gca().tick_params(axis='both', labelsize=20)\n",
    "plt.gca().tick_params(axis='x', labelsize=20)#, rotation=90)\n",
    "#fig.savefig(os.path.join(training_dir, 'boxplot_best_{}_aupr.pdf'.format(num_to_print)))#, dpi=300)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "({'accuracy': [0.82222223, 0.825, 0.80833334, 0.7660167, 0.75487465],\n",
       "  'loss': [1.1056944, 1.1185017, 1.1143066, 1.1064802, 1.1624218],\n",
       "  'num_predicted': [3675, 4375, 3869, 3633, 5462],\n",
       "  'aupr': [0.59521884, 0.61377203, 0.5719928, 0.4523603, 0.5664247]},\n",
       " {'dropout': 0.5,\n",
       "  'epochs': 2000,\n",
       "  'hidden_dims': [100, 50],\n",
       "  'learningrate': 0.0005,\n",
       "  'loss_mul': 100,\n",
       "  'support': 1,\n",
       "  'weight_decay': 0.005})"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "performances[74]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "158\n",
      "6\n"
     ]
    }
   ],
   "source": [
    "looking_for = {'dropout': 0.5, 'hidden_dims': [300, 100],\n",
    "               'learningrate': 0.001,\n",
    "               'loss_mul': 45, 'epochs': 2000,\n",
    "               'support': 1, 'weight_decay': 0.005\n",
    "              }\n",
    "\n",
    "c = 0\n",
    "for idx in indices:\n",
    "    p = performances[idx]\n",
    "    if p[1] == looking_for:\n",
    "        print (idx)\n",
    "        print (c)\n",
    "    c += 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'AUPRC')"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(15, 8))\n",
    "x = pd.DataFrame([i[0]['aupr'] for i in performances],\n",
    "             columns=['cv_{}'.format(i+1) for i in range(len(performances))],\n",
    "             index=['{} Hidden Layers'.format(i+1) for i in range(len(performances))])\n",
    "x['Name'] = x.index\n",
    "seaborn.lineplot(data=x.melt(id_vars=['Name']), x='Name', y='value',\n",
    "                 sort=True, err_style='bars', ci='sd', legend=False, lw=4.5, estimator='median')\n",
    "seaborn.swarmplot(data=x.melt(id_vars=['Name']), x='Name', y='value', color='darkgrey')\n",
    "plt.tick_params(axis='both', labelsize=17)\n",
    "plt.tick_params(axis='x', labelrotation=45)\n",
    "plt.xlabel(None)\n",
    "plt.ylabel('AUPRC', fontsize=20)\n",
    "#fig.savefig(os.path.join(training_dir, 'performance_layers.svg'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "104\n"
     ]
    },
    {
     "ename": "ValueError",
     "evalue": "The number of FixedLocator locations (30), usually from a call to set_ticks, does not match the number of ticklabels (104).",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-13-06f569157d15>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     29\u001b[0m                      \u001b[0;32mlambda\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmean\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'aupr'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     30\u001b[0m                      \u001b[0mreverse\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 31\u001b[0;31m                      value_to_show='num_predicted') # accuracy, aupr, num_predicted, loss\n\u001b[0m",
      "\u001b[0;32m<ipython-input-13-06f569157d15>\u001b[0m in \u001b[0;36mboxplot_performances\u001b[0;34m(perf, num_to_plot, sort_func, reverse, value_to_show)\u001b[0m\n\u001b[1;32m      9\u001b[0m     \u001b[0mfig\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0max\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msubplots\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfigsize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m25\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     10\u001b[0m     \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mseaborn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mboxplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mto_show\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mnum_to_plot\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 11\u001b[0;31m     \u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_xticklabels\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindices\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     12\u001b[0m     \u001b[0;31m# plot upper labels\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     13\u001b[0m     \u001b[0mx_pos\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnum_to_plot\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.7/site-packages/matplotlib/axes/_base.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m     61\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     62\u001b[0m         \u001b[0;32mdef\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 63\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mget_method\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     64\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     65\u001b[0m         \u001b[0mwrapper\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__module__\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mowner\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__module__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.7/site-packages/matplotlib/cbook/deprecation.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m    449\u001b[0m                 \u001b[0;34m\"parameter will become keyword-only %(removal)s.\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    450\u001b[0m                 name=name, obj_type=f\"parameter of {func.__name__}()\")\n\u001b[0;32m--> 451\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    452\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    453\u001b[0m     \u001b[0;32mreturn\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.7/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36m_set_ticklabels\u001b[0;34m(self, labels, fontdict, minor, **kwargs)\u001b[0m\n\u001b[1;32m   1791\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mfontdict\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1792\u001b[0m             \u001b[0mkwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfontdict\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1793\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_ticklabels\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlabels\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mminor\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mminor\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1794\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1795\u001b[0m     \u001b[0;34m@\u001b[0m\u001b[0mcbook\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_make_keyword_only\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"3.2\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"minor\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.7/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36mset_ticklabels\u001b[0;34m(self, ticklabels, minor, **kwargs)\u001b[0m\n\u001b[1;32m   1713\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlocator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlocs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mticklabels\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mticklabels\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1714\u001b[0m                 raise ValueError(\n\u001b[0;32m-> 1715\u001b[0;31m                     \u001b[0;34m\"The number of FixedLocator locations\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1716\u001b[0m                     \u001b[0;34mf\" ({len(locator.locs)}), usually from a call to\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1717\u001b[0m                     \u001b[0;34m\" set_ticks, does not match\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mValueError\u001b[0m: The number of FixedLocator locations (30), usually from a call to set_ticks, does not match the number of ticklabels (104)."
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1800x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def boxplot_performances(perf, num_to_plot, sort_func, reverse=True, value_to_show='aupr'):\n",
    "    perf_sorted = sorted(perf, key=sort_func, reverse=reverse)\n",
    "    indices = np.argsort([sort_func(p) for p in perf])\n",
    "    if reverse:\n",
    "        indices = indices[::-1]\n",
    "    to_show = [p[0][value_to_show] for p in perf_sorted]\n",
    "    \n",
    "    # plot boxplot\n",
    "    fig, ax = plt.subplots(figsize=(25, 10))\n",
    "    x = seaborn.boxplot(data=to_show[:num_to_plot])\n",
    "    x.set_xticklabels(indices)\n",
    "    # plot upper labels\n",
    "    x_pos = np.arange(num_to_plot)\n",
    "    y_pos = [np.mean(x[0][value_to_show]) for x in perf_sorted]\n",
    "    labels = ['{0:.2f}'.format(np.mean(x[0]['aupr'])) for x in perf_sorted]\n",
    "    \n",
    "    for tick, label in zip(range(num_to_plot), ax.get_xticklabels()):\n",
    "        ax.text(x_pos[tick]-.4, y_pos[tick], labels[tick], fontsize=15)\n",
    "\n",
    "    ax.set_ylabel('Area Under Precision Recall Curve')\n",
    "    ax.set_xlabel('Indices of Grid Search Run')\n",
    "    fig.savefig(os.path.join(training_dir, 'boxplot_best_{}_aupr.png'.format(num_to_print)), dpi=300)\n",
    "\n",
    "#pp38 = [p for p in performances if np.mean(p[0]['num_predicted']) >= 1]\n",
    "desired_perfs = [p for p in performances if p[1]['support'] == 1]\n",
    "print (len(desired_perfs))\n",
    "boxplot_performances(desired_perfs,\n",
    "                     30,\n",
    "                     lambda x: np.mean(np.array(x[0]['aupr'])),\n",
    "                     reverse=True,\n",
    "                     value_to_show='num_predicted') # accuracy, aupr, num_predicted, loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'dropout': [0.25, 0.5],\n",
       " 'epochs': [2000],\n",
       " 'hidden_dims': [(300, 100), (100, 50), (100, 50, 10), (1000,)],\n",
       " 'learningrate': [0.01, 0.001, 0.0005],\n",
       " 'loss_mul': [100, 45, 15, 60, 30],\n",
       " 'support': [1],\n",
       " 'weight_decay': [0.005]}"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# combinations\n",
    "hps = performances[0][1].keys()\n",
    "all_values_keys = {}\n",
    "for k in hps:\n",
    "    different_vals = []\n",
    "    for p in performances:\n",
    "        x = p[1][k]\n",
    "        if type(x) == list:\n",
    "            x = tuple(p[1][k])\n",
    "        different_vals.append(x)\n",
    "    all_values_keys[k] = list(set(different_vals))\n",
    "all_values_keys"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "288"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "3*8*2*6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
